package com.example.barnes.ummo.holder;
import android.app.Activity;
import android.content.Context;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.Toast;
import com.example.barnes.ummo.R;
import com.example.barnes.ummo.db.Db;
import com.example.barnes.ummo.fragment.SelectableTreeFragment;
import com.example.barnes.ummo.ummoAPI.QUser;
import com.unnamed.b.atv.model.TreeNode;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.List;
import java.util.Random;
import cn.pedant.SweetAlert.SweetAlertDialog;
/**
* Created by barnes on 8/6/15.
*/
public class SelectableItemHolder extends TreeNode.BaseNodeViewHolder<String>
{
private TextView tvValue;
private CheckBox nodeSelector;
private Button exit_q_menu;
public String selecHeader;
String tabTitle;
private int i = -1;
SelectableTreeFragment parent;
int tabPos = 0;
public List<String> qsJoinedNum = null;
public List<String> qNameList = null;
public List<String> qNameServiceId = null;
public List<String> qJoinedQid = null;
List<String> qName_List;
String qsJoined;
Db db;
JSONObject vq;
public void dialog(final String text)
{
final Context c = context;
final String text_ = text;
final SweetAlertDialog pDialog;
pDialog = new SweetAlertDialog(context, SweetAlertDialog.PROGRESS_TYPE)
.setTitleText(selecHeader)
.setContentText("Loading...");
pDialog.show();
pDialog.setCancelable(false);
//Extracts Qstats from text
int mins=0;
int qLength=0;
try
{
JSONObject jobject = new JSONObject(text);
if (jobject.has("ttdq"))
{
mins = jobject.getInt("ttdq");
}
if (jobject.has("qErs"))
{
qLength = jobject.getJSONObject("qErs").length();
}
}
catch (JSONException jse)
{
Log.e("Erorr","Can't Extract Qstats form text"+jse.toString());
}
final int ttdq_mins = mins/(60*1000);
final int ttqd_secs = mins/(1000)-ttdq_mins*60;
final int final_length=qLength;
//End Extracts Qstats from text
new CountDownTimer(800 * 7, 800)
{
public void onTick(long millisUntilFinished)
{
i++;
switch (i)
{
case 0:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.blue_btn_bg_color));
break;
case 1:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.material_deep_teal_50));
break;
case 2:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.success_stroke_color));
break;
case 3:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.material_deep_teal_20));
break;
case 4:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.material_blue_grey_80));
break;
case 5:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.warning_stroke_color));
break;
case 6:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.success_stroke_color));
break;
}
}
public void onFinish()
{
i = -1;
pDialog.setTitleText(selecHeader + " Queue")
.setContentText(
"Location of service : ".toUpperCase() + "\nMbabane\n" +
"Length of queue : ".toUpperCase() + "\n"+final_length+"\n" +
"Time for single process : ".toUpperCase() + "\n"+ttdq_mins+":"+ttqd_secs+"\n" +
"Service Requirements:".toUpperCase() + "\nNational Id")
.setConfirmText("Join Q")
.setCancelClickListener(new SweetAlertDialog.OnSweetClickListener()
{
@Override
public void onClick(SweetAlertDialog sDialog)
{
sDialog.dismiss();
pDialog.dismiss();
nodeSelector.setChecked(false);
}
})
.showCancelButton(true)
.setConfirmClickListener(
new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sDialog) {
qsJoinedNum = db.getAllQs();
if (!qsJoinedNum.isEmpty())
{
int qsJoinedSize = qsJoinedNum.size();
tabPos = qsJoinedSize;
Log.e("tabPos", "" + tabPos);
}
qNameList = db.getQName(text);
if (qNameList.isEmpty())
{
++tabPos;
//Log.e("++tabPos", "" + tabPos);
//Log.e("Position", "" + tabPos);
Random r = new Random();
int i1 = r.nextInt(101 - 1) + 1;
final int qpos = final_length + 1;
final String pos = Integer.toString(i1);
sDialog.setTitleText("Queued in...")
.setContentText("You have joined the " + selecHeader + " " + selecHeader + " queue, your position is #" + qpos)
.setConfirmText("OK")
.showCancelButton(false)
.setCancelClickListener(null)
.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sDialog) {
parent.joinSelectedQ();
tabTitle = selecHeader + " " + text;
qNameServiceId = db.getQService_id(text);
//String serviceid_string = qNameServiceId.get(0);
//int serviceid = Integer.parseInt(serviceid_string);
//db.insertQ(serviceid, text, tabPos, pos);
//select = true;
//Intent i = new Intent();
//i.setClass(context, Qs.class);
//i.putExtra("tab", "tabTitle");
//String positionTab = Integer.toString(tabPos);
//String int_serviceid = Integer.toString(serviceid);
//i.putExtra("serviceid", "int_serviceid");
//i.putExtra("tabPos", positionTab);
sDialog.dismiss();
nodeSelector.setChecked(true);
exit_q_menu.setVisibility(View.VISIBLE);
nodeSelector.setClickable(false);
//context.startActivity(i);
/*final String qpos_string = Integer.toString(qpos);*/
((SelectableTreeFragment) c).getUser().updateJoinedQs();
//Intent i = new Intent(c, Main_Activity.class);
//Log.e("++tabPos", "" + tabPos);
//context.startActivity(i);
pDialog.dismiss();
db.close();
}
})
.changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
} else {
pDialog.setTitleText("Exit Queue")
.setContentText("You are already queued in to this que. Do you want to exit the " + selecHeader + " " + text + " queue")
.setConfirmText("yes")
.showCancelButton(true)
.setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sDialog) {
sDialog.dismiss();
pDialog.dismiss();
nodeSelector.setChecked(true);
exit_q_menu.setVisibility(View.VISIBLE);
}
})
.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sDialog) {
qJoinedQid = db.getJoinedQ_id(text);
String qid_string = qJoinedQid.get(0);
db.deleteQ(qid_string);
//select = false;
sDialog.dismiss();
pDialog.dismiss();
exit_q_menu.setVisibility(View.GONE);
nodeSelector.setChecked(false);
nodeSelector.setEnabled(true);
nodeSelector.setClickable(true);
tvValue.setClickable(true);
db.close();
}
})
.changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
}
}
})
.changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
}
}.start();
}
public void dialogEjectQ(final String text, final CheckBox nodeSelector)
{
final Context c = context;
final String text_ = text;
final SweetAlertDialog pDialog;
pDialog = new SweetAlertDialog(context, SweetAlertDialog.PROGRESS_TYPE)
.setTitleText(selecHeader+" "+text)
.setContentText("Exiting " + text);
pDialog.show();
pDialog.setCancelable(false);
new CountDownTimer(800 * 7, 800)
{
public void onTick(long millisUntilFinished)
{
i++;
switch (i)
{
case 0:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.blue_btn_bg_color));
break;
case 1:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.material_deep_teal_50));
break;
case 2:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.success_stroke_color));
break;
case 3:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.material_deep_teal_20));
break;
case 4:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.material_blue_grey_80));
break;
case 5:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.warning_stroke_color));
break;
case 6:
pDialog.getProgressHelper().setBarColor(c.getResources().getColor(R.color.success_stroke_color));
break;
}
}
public void onFinish()
{
i = -1;
pDialog.setTitleText("Exit Queue")
.setContentText("You are already queued in to this que. Do you want to exit the " + selecHeader + " " + text + " queue")
.setConfirmText("yes")
.showCancelButton(true)
.setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sDialog) {
sDialog.dismiss();
pDialog.dismiss();
nodeSelector.setChecked(true);
exit_q_menu.setVisibility(View.VISIBLE);
}
})
.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sDialog) {
qJoinedQid = db.getJoinedQ_id(text);
String qid_string = qJoinedQid.get(0);
db.deleteQ(qid_string);
qName_List = db.getQName(text);
//select = false;
sDialog.dismiss();
pDialog.dismiss();
nodeSelector.setChecked(false);
nodeSelector.setClickable(true);
exit_q_menu.setVisibility(View.GONE);
db.close();
}
})
.changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
}
}.start();
}
public SelectableItemHolder(Activity context, JSONObject itemHeader, String qjoined)
{
super(context);
vq = itemHeader;
parent = (SelectableTreeFragment)context;
db = new Db(context);
//String s =((SingleFragmentActivity)context).getUser().getName();
Log.e("User","s");
try
{
selecHeader = itemHeader.getString("name");
}
catch (JSONException jse)
{
Log.e("Error",jse.toString());
selecHeader = "Error, get Help";
}
qsJoined = qjoined;
}
@Override
public View createNodeView(final TreeNode node, String value)
{
final LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.layout_selectable_item, null, false);
tvValue = (TextView) view.findViewById(R.id.node_value);
tvValue.setText(value);
tvValue.isClickable();
tvValue.setTextIsSelectable(true);
nodeSelector = (CheckBox) view.findViewById(R.id.node_selector);
exit_q_menu = (Button) view.findViewById(R.id.btn_exit_q_menu);
nodeSelector.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
db.open();
//Log.e("User", parent.getUser().getName());
qNameList = db.getQName(tvValue.getText().toString());
if (nodeSelector.isChecked())
{
//dialog(tvValue.getText().toString());
try
{
parent.setSelectedQ(vq.getString("Id"));
QUser user =parent.getUser();
if(user!=null){
user.getQ(vq.getString("Id"));
Log.e("USER",user.getName());
}
else {
Log.e("USER","NULL");
}
parent.setQinfoDialog(SelectableItemHolder.this);
}
catch (JSONException jse)
{
Toast.makeText(parent,"Cannot Get The Q information, Q ID is Broken",Toast.LENGTH_LONG).show();
}
}
db.close();
}
});
exit_q_menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialogEjectQ(tvValue.getText().toString(), nodeSelector);
}
});
db.open();
qName_List = db.getQName(tvValue.getText().toString());
if (!qName_List.isEmpty())
{
exit_q_menu.setVisibility(View.VISIBLE);
nodeSelector.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (qName_List.isEmpty())
{
nodeSelector.setChecked(false);
nodeSelector.setEnabled(true);
nodeSelector.setClickable(true);
nodeSelector.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
qNameList = db.getQName(tvValue.getText().toString());
if (nodeSelector.isChecked())
{
dialog(tvValue.getText().toString());
}
}
});
} else if (!qName_List.isEmpty()) {
nodeSelector.setChecked(true);
nodeSelector.setClickable(false);
}
}
});
}
db.close();
tvValue.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
if (tvValue.isPressed())
{
nodeSelector.setChecked(true);
}
}
});
if (node.isLastChild())
{
view.findViewById(R.id.bot_line).setVisibility(View.INVISIBLE);
}
return view;
}
@Override
public void toggleSelectionMode(boolean editModeEnabled)
{
nodeSelector.setVisibility(editModeEnabled ? View.VISIBLE : View.GONE);
nodeSelector.setChecked(false);
}
}